﻿using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Linq;
using Nemerle.Peg;

namespace Nemerle2.Compiler
{
  /// <summary></summary>
  public abstract class NMemberInfo : IMemberInfo
  {
    public Project : NProject;

    #region IMember  Members

    public abstract CustomAttributes : ICustomAttributes { get }

    public abstract Type : FixedType { get; }

    public CanAccess(source : ITypeInfo) : bool
    {
    	_ = source;
    	throw System.NotImplementedException()
    }

    public CanAccess(memberITypeInfo : ITypeInfo, currentITypeInfo : ITypeInfo, isThisAccess : bool) : bool
    {
    	_ = memberITypeInfo; _ = currentITypeInfo; _ = isThisAccess;
    	throw System.NotImplementedException()
    }

    public abstract DeclaringType : ITypeInfo { get; }

    public virtual GetMemType() : FixedType
    {
    	throw System.NotImplementedException()
    }

    public abstract IsAbstract : bool { get }

    public abstract IsInternal : bool { get }

    public abstract virtual IsObsolete : bool { get }

    public abstract IsPrivate : bool { get }
    public abstract IsProtected : bool { get }
    public abstract IsPublic : bool { get }
    public abstract IsStatic : bool {	get }

    public Location : Location
    {
    	get
    	{
    		throw System.NotImplementedException()
    	}
    }

    public abstract MemberKind : MemberKind { get }

    public virtual Modifiers : Modifiers
    {
    	get
    	{
    		throw System.NotImplementedException()
    	}
    }

    public abstract Name : string {	get }

    public NameLocation : Location
    {
    	get
    	{
    		throw System.NotImplementedException()
    	}
    }

    public abstract UniqueKey : long { get }

    #endregion

    public override ToString() : string
    {
      this.MemberKind.ToString() + ": " + Name;
    }
  }
}
